import router from "@/router"
import store from "@/store"
import storage from "./storage"

//进度条
import nprogress from "nprogress"
import 'nprogress/nprogress.css'

//路由守卫
router.beforeEach((to,from,next) => {
    //进度条打开
    nprogress.start();



    //to 目标路由对象
    //from 源路由对象
    //next是个函数，调用之后，可以理解为放行 
    let token = storage.get('sasa-token')
    // console.log(token);
    // console.log(to);
    if(token){

        //判断是否有用户菜单
        if(!store.state.permission.userMenu.length){
            // console.log(store.state.permission.userMenu);
            //发起请求，获取远程菜单
            store.dispatch('permission/FETCH_MENU_LIST')
                .then(() => {
                //这里要注意, next里面要传参数即要进入的页面的路由信息，因为next传参数后，当前要进入的路由会被废止，转而进入参数对应的路由，虽然是同一个路由，这么做主要是为了确保addRoute生效了,并且不产生历史记录
                    next({path:to.path,replace:true,query:to.query})
            })
        }else{
            next()
            //已经登入直接放行
        }

        
    }else{
        //没有token访问的是登录页
        if(to.path === '/login'){
            next()
        }else{
            next({path:"/login"})
        }
    }
})


//全局后置钩子afterEach中停止进度条
router.afterEach((to,from) => { //已经进入页面
    //进度条消失
    nprogress.done();

    // console.log('to',to);
    // console.log('from',from);
    //to里面有个属性叫做matched 这里能够获取到匹配成功的路由对象
    //因为第0项匹配的是空字符串路径,我们不需要,所以要进行处理
    let matched = to.matched.filter((item,index) => index > 0)
    // console.log(matched);
    store.commit('permission/SET_CRUMB',matched)
})

export default router